﻿#ifndef MSGAPI_H
#define MSGAPI_H

#include <QString>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include "tcpclient.h"
#include "common.h"

class MsgApi {
  private:
    MsgApi();
  public:
    static MsgApi *getMsgApi() {
        static MsgApi msgApi;
        return &msgApi;
    }

    /**
    获取JSON数据的object
    json:json数据
    key:键值
    object:接收object
    */
    bool getJsonObject(const QByteArray &json, const QString &key, QJsonObject &oValue);

    /**
    获取JSON数据的object
    json:json数据
    key:键值
    object:接收object
    */
    bool getJsonArray(const QByteArray &json, const QString &key, QJsonArray &aValue);

    /**
    获取JSON数据的int
    object:json数据
    key:键值
    value:接收value
    */
    bool getJsonInt(const QJsonObject &object, const QString &key, int &iValue);

    /**
    获取请求结果
    object:json数据
    reult:接收结果,0成功,1失败
    */
    bool getResult(const QJsonObject &object, int &reult);

    // 与服务器连接状态
    bool isConnected();

    /**
    增加一条考勤记录
    username:用户名
    attendanceType:考勤类型(刷脸、刷卡)
    currentTime:打卡时间
    picPath:刷脸图片
    */
    bool insertAttendanceRecord(QString &userId, int attWay, QString &picPath, QString &currentTime);

    /**
    解析增加一条考勤记录返回数据
    object:json数据
    result:返回结果
    count:记录数
    createTime:创建时间
    */
    bool parseInsertAttendanceRecord(QJsonObject &object, int &result, int &count, QString &createTime);

    /**
    获取考勤列表
    page:页数
    pageSize:每页大小
    currentSearchUsername:搜索的用户名
    currentSearchStartTime:搜索的起始时间
    currentSearchEndTime:搜索的结束时间
    */
    bool getAttendanceInfoList(int page, int pageSize, QString currentSearchUsername,
                               QString currentSearchStartTime, QString currentSearchEndTime);

    /**
    解析返回的用户数据列表
    object:json数据
    count:查询的总数
    userList:存放结果
    */
    bool parsegetAttendanceInfoList(QJsonObject &object, int &count, QList<AInfo> &attendanceInfoList);

    /**
    用户注册或修改
    uInfo:用户数据
    */
    bool userRegister(UInfo &uInfo);

    /**
    解析用户注册或修改返回数据
    object:json数据
    result:返回结果
    count:查询的总数
    */
    bool parseUserRegister(QJsonObject &object, int &result, int &count);

    /**
    获取用户列表
    page:页数
    pageSize:每页大小
    currentSearchUsername:搜索的用户名
    currentSearchStartTime:搜索的起始时间
    currentSearchEndTime:搜索的结束时间
    */
    bool getUserInfoList(int page, int pageSize, QString currentSearchUsername,
                         QString currentSearchStartTime, QString currentSearchEndTime);

    /**
    解析返回的用户数据列表
    object:json数据
    count:查询的总数
    userList:存放结果
    */
    bool parseGetUserInfoList(QJsonObject &object, int &count, QList<UInfo> &userInfoList);

    /**
    删除用户
    userId:userId
    */
    bool userDelete(QString &userId);

    /**
    解析删除用户返回数据
    userId:userId
    count:查询的总数
    */
    bool parseUserDelete(QJsonObject &object, int &result, int &count);

    /**
    获取用户数据总量
    count:存放结果
    */
    bool getUserInfoCount(int &count);

};

#endif // MSGAPI_H
